#ifndef __COMDEF_H_
#define __COMDEF_H_

#ifndef UNUSED
#define UNUSED(x)       (void)x
#endif

#ifndef FUNC_START
#define FUNC_START {printf("\r\n****************************%s start!***************************\r\n", __FUNCTION__);}
#endif

#ifndef FUNC_STOP
#define FUNC_STOP {printf("\r\n****************************%s stop!****************************\r\n", __FUNCTION__);}
#endif

#ifndef ERROR 
#define ERROR(x) {fprintf(stderr, "ERROR!%s!(%s:(%s line%d) )\r\n", x, __FUNCTION__, __FILE__, __LINE__);}
#endif

#ifndef WARNING
#define WARNING(x) {printf("WARNING!%s!(%s:(%s line%d) )\r\n", x, __FUNCTION__, __FILE__, __LINE__);}
#endif

#ifndef WARNING
#define WARNING(x) {printf("INFO!%s!(%s:(%s line%d) )\r\n", x, __FUNCTION__, __FILE__, __LINE__);}
#endif

#ifndef DIVIDING_LINE
#define DIVIDING_LINE {printf("\r\n**********************************************************************\r\n");}
#endif

#ifndef HEAD_LINE
#define HEAD_LINE(x) {printf("\r\n-----------------------%s-----------------------\r\n", x);}
#endif

#ifndef ARRAY_SIZE
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[0]) + __must_be_array(arr))
#endif

#ifndef min
#define min(x, y) ({		\
const typeof(x) __x = (x);	\
const typeof(y) __y = (y);	\
(void) (&__x == &__y);		\
__x < __y ? __x : __y; })
#endif

#endif
